"""
不可变数据类型--不发生拷贝，只存在赋值，即使使用深浅拷贝的方法也是跟发生赋值是相同的。
可变数据类型
    1、赋值:id相同
    2、浅拷贝:id不同，但是其中的可变数据类型id相同
    3、深拷贝:id不同
注意: 赋值不是浅拷贝，也不是深拷贝，赋值只是简单的地址引用。
"""

import copy

str_a = 'this is a string'
list_2 = ['a', 'b', 'c', 'd']
list_3 = ['1', '2', '3', ['4', '5']]

print('赋值'.center(30, '*'))
# 赋值是简单的id地址的拷贝
# 对于可变数据类型，使用方法处理，则同时发生变化，如果发生赋值则不同时变化
c_str_a = str_a
print(id(str_a) == id(c_str_a))
c_list_2 = list_2
print(id(c_list_2) == id(list_2))
# 使用可变数据类型的内置操作方法则同时改变数值，地址不变
c_list_2.append('e')
print(c_list_2 == list_2)
# 发生赋值 地址直接发生变化
c_list_2 = ['2']
print(c_list_2 == list_2)

print('copy.copy'.center(30, '-'))
# 浅拷贝
# 不可变数据类型-浅拷贝是地址的直接赋值
cp_str_a = copy.copy(str_a)
print(id(cp_str_a) == id(str_a))

# 可变数据类型的浅拷贝-地址是不同的
cp_list_2 = copy.copy(list_2)
print(id(cp_list_2) == id(list_2))


